package org.javahispano.javacup.tacticas_aceptadas.Moyatzo.MoyatzoBraves;

import org.javahispano.javacup.modelo.Constantes;
import org.javahispano.javacup.modelo.Posicion;

public class ConstantesMoyatzoBraves {

	// Establece la distancia lateral entre mis jugadores.
	public static final double DIST_LAT_ENTRE_JUGS =
		( Constantes.ANCHO_CAMPO_JUEGO / 6 );
	
	// N�mero m�ximo de jugadores que presionan la posici�n del bal�n.
	public static final int NUM_JUG_PRESIONAN = 2;
	
	// Factor de presi�n. Se multiplica a la distancia de control de bal�n
	//  para determinar la distancia a la que presionar�n los jugadores.
	public static final double FACTOR_PRESION = 0.925;
	
	// Distancia de presi�n de un jugador de campo.
	public static final double DIST_PRESION_JUG_CAMPO =
		( FACTOR_PRESION * Constantes.DISTANCIA_CONTROL_BALON );

	// Distancia que marca el fin del �rea de m�nima presi�n del portero
	//  e inicia la zona de presi�n media.
	public static final double DIST_MEDIA_PRESION_PORTERO =
		( Constantes.DISTANCIA_PENAL + Constantes.RADIO_PENAL ); 

	// Distancia que marca el fin del �rea de media presi�n del portero
	//  e inicia la zona de m�xima presi�n.
	public static final double DIST_MAX_PRESION_PORTERO =
		( ( ( Constantes.LARGO_AREA_CHICA / 2 ) + ( 3 * ( Constantes.LARGO_ARCO / 2 ) ) ) / 4 );
	
	// Factor utilizado para calcular la distancia del portero al bal�n
	//  en el �rea de m�nima presi�n.
	public static final double FACTOR_MIN_PRESION_PORTERO = 0.9;
	
	// Distancia de presi�n "ideal" del portero.
	public static final double DIST_PRESION_PORTERO = 
		( FACTOR_PRESION * Constantes.DISTANCIA_CONTROL_BALON_PORTERO );
	
	// Factor utilizado para calcular la distancia del portero al bal�n
	//  en el �rea de presi�n media.
	public static final double FACTOR_MED_PRESION_PORTERO =
		( DIST_PRESION_PORTERO / DIST_MAX_PRESION_PORTERO );
	
	// Diferencia entre los factores de presi�n del portero medio y m�nimo.
	public static final double DIF_FACTORES_MIN_MED =
		( FACTOR_MIN_PRESION_PORTERO - FACTOR_MED_PRESION_PORTERO );
	
	// Diferencia entre las distancias de presi�n del portero media y m�xima.
	public static final double DIF_DIST_PRESION_PORTERO_MEDIA_MAX =
		( DIST_MEDIA_PRESION_PORTERO - DIST_MAX_PRESION_PORTERO );
	
	// N�mero de intentos de pases que haremos en cada iteraci�n.
	public static final int NUM_INTENTOS_PASE = 5;
	
	// M�nima distancia que debe tener un jugador despecto del bal�n
	//  para considerarlo apto para un pase.
	public static final double MIN_DIST_PASE = ( 2 * Constantes.DISTANCIA_CONTROL_BALON );
	
	// M�nima distancia de pase al cuadrado.
	public static final double MIN_DIST_PASE_AL_CUADRADO = Math.pow( MIN_DIST_PASE, 2);
	
	// M�nima distancia de disparo.
	public static final double MIN_DIST_DISPARO = ( Constantes.LARGO_ARCO / 2 );
	
	// M�xima distancia de disparo.
	public static final double MAX_DIST_DISPARO =
		1.375 * ( Constantes.DISTANCIA_PENAL + Constantes.RADIO_PENAL );
	
	// Diferencia entre la distancia m�xima y m�nima de disparo.
	public static final double DIF_DISTS_DISPARO =
		( MAX_DIST_DISPARO - MIN_DIST_DISPARO );
	
	// Define d�nde est� la "l�nea" de 3/4 del campo. 
	public static final double LINEA_TRES_CUARTOS =
		( Constantes.LARGO_CAMPO_JUEGO / 4 );

	// Diferencia entre las velocidades m�xima y m�nima de los jugadores.
	public static final double DIF_VELOCIDADES =
		Constantes.VELOCIDAD_MAX - Constantes.VELOCIDAD_MIN;

	// Distancia de control del bal�n al cuadrado.
	public static final double DISTANCIA_CONTROL_BALON_AL_CUAD =
		Math.pow( Constantes.DISTANCIA_CONTROL_BALON, 2 );

	// Distancia de control del bal�n del portero al cuadrado.
	public static final double DISTANCIA_CONTROL_BALON_PORTERO_AL_CUAD =
		Math.pow( Constantes.DISTANCIA_CONTROL_BALON_PORTERO, 2 );
	
	// Valor de las coordenadas "Y" que marca donde acaba el �rea propia.
	public static final double ZONA_AREA_PROPIA_Y =
		( - Constantes.LARGO_CAMPO_JUEGO / 2 ) + Constantes.ANCHO_AREA_GRANDE;
	
	// Posici�n de despeje: a la izquierda en el mediocampo.
	public static final Posicion pos_despeje_izq =
		new Posicion( 0.65 * ( - Constantes.ANCHO_CAMPO_JUEGO / 2 ), 0 ); 

	// Posici�n de despeje: a la derecha en el mediocampo.
	public static final Posicion pos_despeje_der =
		new Posicion( 0.65 * ( Constantes.ANCHO_CAMPO_JUEGO / 2 ), 0 ); 

	// Posici�n de centro: a la izquierda del punto de penal.
	public static final Posicion pos_centro_izq =
		new Posicion( ( - Constantes.LARGO_AREA_CHICA / 2 ), ( ( Constantes.LARGO_CAMPO_JUEGO / 2 ) - Constantes.DISTANCIA_PENAL ) ); 

	// Posici�n de centro: a la derecha del punto de penal.
	public static final Posicion pos_centro_der =
		new Posicion( ( Constantes.LARGO_AREA_CHICA / 2 ), ( ( Constantes.LARGO_CAMPO_JUEGO / 2 ) - Constantes.DISTANCIA_PENAL ) ); 

	// Posici�n de centro "cerrado": a la izquierda del punto de penal.
	public static final Posicion pos_centro_izq_cerrado =
		new Posicion( ( - Constantes.LARGO_AREA_CHICA / 2 ), ( ( Constantes.LARGO_CAMPO_JUEGO / 2 ) - Constantes.ANCHO_AREA_CHICA ) ); 

	// Posici�n de centro "cerrado": a la derecha del punto de penal.
	public static final Posicion pos_centro_der_cerrado =
		new Posicion( ( Constantes.LARGO_AREA_CHICA / 2 ), ( ( Constantes.LARGO_CAMPO_JUEGO / 2 ) - Constantes.ANCHO_AREA_CHICA ) );
	
	// N�mero de jugadores sobre los que comprobaremos si el bal�n se les
	//  est� acercando.
	public static final int NUM_JUGS_SE_APROXIMA_BALON = 2;
	
	// Diferencia entre la m�xima y m�nima velocidad de remate.
	public static final double DIF_VELS_REMATE =
		Constantes.REMATE_VELOCIDAD_MAX - Constantes.REMATE_VELOCIDAD_MIN;
	
	// Altura m�xima a la que queremos que entre el bal�n en la porter�a.
	public static final double MAX_ALTURA_DISPARO_EN_ARCO =
		( ( 5 * Constantes.ALTO_ARCO ) + ( 2 * Constantes.ALTURA_CONTROL_BALON ) ) / 7;

	// Altura que se retornar� cuando haya un error en la simulaci�n.
	public static final double ALTURA_DISPARO_CON_ERROR =
		( MAX_ALTURA_DISPARO_EN_ARCO + 1 );
	
	// Diferencia entre el error m�ximo y el error m�nimo al golpear el bal�n.
	public static final double DIF_ERROR_MAX_MIN =
		( Constantes.ERROR_MAX - Constantes.ERROR_MIN );

	// Marca d�nde est� la l�nea de fondo (para coordenadas Y).
	public static final double LINEA_DE_FONDO =
		( Constantes.LARGO_CAMPO_JUEGO / 2 );

	// Convierte grados a radianes.
	public static final double CONVERT_TO_RADIANS =
		( Math.PI / 180.0 );

}
